package com.ruiyi.adrobot.utils;

/**
 * 生产15位IMEI号
 */
public class IMEIUtil {

    private static String[] imeiArray = new String[]{"86310003", "99000918", "86694602", "86523669", "86959802", "86932202", "86133800", "86325493", "86769502", "86807702", "86295303", "86302603", "86263603"};

    /**
     * imei由15位数字组成，
     * 前6位(TAC)是型号核准号码，代表手机类型。
     * 接着2位(FAC)是最后装配号，代表产地。
     * 后6位(SNR)是串号，代表生产顺序号。
     * 最后1位 (SP)是检验码。
     * <p>
     * 检验码计算：
     * (1).将偶数位数字分别乘以2，分别计算个位数和十位数之和
     * (2).将奇数位数字相加，再加上上一步算得的值
     * (3).如果得出的数个位是0则校验位为0，否则为10减去个位数
     *
     * @author tao.zeng
     */
    public static String buildIMEI() {
        String imeiString = imeiArray[RandomUtil.nextInt(imeiArray.length)]; //前8位
        // 获得随机数
        double pross = (1 + RandomUtil.nextDouble()) * Math.pow(10, 7);
        // 将获得的获得随机数转化为字符串
        String fixLenthString = String.valueOf(pross);
        Integer checkNum = checkNum(imeiString + fixLenthString.substring(2, 8));
        // 返回固定的长度的随机数
        return imeiString + fixLenthString.substring(2, 8) + checkNum;
    }

    public static String buildIMEIBy8(String imeiString) {
        // 获得随机数
        // 将获得的获得随机数转化为字符串
        String randomNum;
        do {
            randomNum = String.valueOf((int) ((Math.random() * 9 + 1) * 100000));
        } while (randomNum.contains("000"));

        Integer checkNum = checkNum(imeiString + randomNum);
        // 返回固定的长度的随机数
        return imeiString + randomNum + checkNum;
    }


    private static Integer checkNum(String imeiString) {
        char[] imeiChar = imeiString.toCharArray();
        int resultInt = 0;
        for (int i = 0; i < imeiChar.length; i++) {
            int a = Integer.parseInt(String.valueOf(imeiChar[i]));
            i++;
            final int temp = Integer.parseInt(String.valueOf(imeiChar[i])) * 2;
            final int b = temp < 10 ? temp : temp - 9;
            resultInt += a + b;
        }
        resultInt %= 10;
        return resultInt == 0 ? 0 : 10 - resultInt;
    }

    public static void main(String[] args) {
        for (int i = 0; i < 100; i++) {
            System.out.println(buildIMEIBy8("A1234567"));
        }
    }
}

